import { reqPhoneCode, reqRegUser, reqUserLogin, reqUserInfo, reqLoginOut } from "@/api"
//导入负责存、取本地token的函数
import { set_Token, get_Token, remove_token } from "@/utils/token"
const state = {
    // 注册验证码
    code:'',
    // 如未登陆,本地不会有token,值就为null 
    token: get_Token(),
    // 用户信息之用户名(登陆成功(有了token)才会有数据)
    nickName: ''
}
const mutations = {
    // 获取验证码
    GETCODE(state,code) {
      state.code=code
    },
    // 登陆
    GETUSERLOGIN(state, token,nickName) {
        state.token = token
        state.nickName = nickName
    },
    // 用户名
    GETUSERINFO(state, nickName) {
        state.nickName = nickName
    },
    // 退出登陆 清空仓库用户信息、token及本地token
    CLEAR(state) {
        state.token = ''
        state.nickName = ''
        remove_token()
    }
}
const actions = {
    // 获取手机验证码
    // 切记 就算commit不用 也要进行占位,否则参数传递不了
    async getPhoneCode({ commit }, phone) {
        let result = await reqPhoneCode(phone)
        if (result.code === 200) {
            commit('GETCODE',result.data)
            return 'ok'
        } else {
            return Promise.reject(new Error('获取验证码失败！'))
        }

    },

    // 注册新用户
    async getRegUser({ commit }, data) {
        let result = await reqRegUser(data)
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('注册失败！'))
        }

    },

    // 登陆
    // 切记 就算commit不用 也要进行占位,否则参数传递不了
    async getUserLogin({ commit }, data) {
        let result = await reqUserLogin(data)
        if (result.code === 200) {
            console.log(result);
            // 将登陆后服务器响应回的token进行存储
            commit('GETUSERLOGIN', result.data.token,result.data.nickName)
            // 将服务器响应回的token持久存储
            set_Token(result.data.token)
            return 'ok'
        } else {
            return Promise.reject(new Error('登陆失败！'))

        }
    },

    // 获取用户信息之用户名
    async getUserInfo({ commit }) {
        let result = await reqUserInfo()
        if (result.code === 200) {
            // 这里暂时不要捕获成功与失败 因为token暂时还使用持久化存储(后面用了再说),result.data就拿不到用户数据 因为这个接口必须携带token请求头字段才可请求成功获取到数据
            commit('GETUSERINFO', result.data.nickName)
            return 'ok'
        }else {
            return Promise.reject(new Error('获取用户信息失败！'))
        }
    },

    // 退出登录
    async getloginOut({ commit }) {
        let result = await reqLoginOut()
        if (result.code === 200) {
            commit('CLEAR')
            return 'ok'
        } else {
            return Promise.reject(new Error('退出登陆失败!'))
        }

    }
}
const getters = {
}
export default {
    state,
    mutations,
    actions,
    getters,
}